package com.controller;
/*
* 专门用来处理用户业务逻辑的控制器
* */

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import java.util.HashMap;
import java.util.Map;

@Controller
@Scope("prototype")  //controller使用非单例，保证线程安全的。
@RequestMapping("users")  //表示这里所有的动作都是处理用户业务逻辑请求的。
public class UsersController {

    //登录
    //@RequestMapping(value="login",method = RequestMethod.GET)
    @GetMapping("login")
    //1.返回字符串，表示是视图的名字
    /*
    public String login(){

        //探讨Controller处理用户请求单线程，还是多线程呢。
        //处理用户请求，controller对象单例还是原型。
        System.out.println("当前controller对象的hashCode:"+this.hashCode());
        System.out.println("当前线程的ID：" + Thread.currentThread().getId());

        System.out.println("执行用户登录动作....");
        return "login";
    }*/

    //2. 返回ModelAndView
    /*
    public ModelAndView login(){

        ModelAndView mv = new ModelAndView();
        mv.setViewName("login");  //WEB-INF/html/login.html
        return mv;
    }*/

    //3.返回Map,要求动作的名字默认和返回视图的名字一样。否则会找不到视图。
    /*
    public Map<String,Object> login(){

        Map<String,Object> map = new HashMap<String,Object>();
        //默认去/WEB-INF/html/login.html
        return map;
    }*/

    //4.返回void,不返回任何的视图。
    public void login(){

        //Map<String,Object> map = new HashMap<String,Object>();
        //默认去/WEB-INF/html/login.html
        System.out.println("执行用户登录动作...");
        //return ;
    }

    //注册
    //@RequestMapping(value="reg",method = RequestMethod.POST)
    @PostMapping("reg")
    public String reg(){
        System.out.println("执行用户注册动作....");
        return "reg";
    }


    //注销
    @RequestMapping(value="logout",method = {RequestMethod.GET,RequestMethod.POST})
    //@GetMapping("logout")
    //@PostMapping("logout")
    public String logout(){
        System.out.println("执行用户注销动作...");
        return "logout";
    }
}
